/**
 * 表单验证工具函数
 * @author 王勇程 <laughskydragon@qq.com>
 */

/**
 * 验证手机号码
 * @param {string} phone 手机号码
 * @returns {boolean} 验证结果
 */
export function validatePhone(phone) {
  const phoneReg = /^1[3-9]\d{9}$/
  return phoneReg.test(phone)
}

/**
 * 验证邮箱
 * @param {string} email 邮箱地址
 * @returns {boolean} 验证结果
 */
export function validateEmail(email) {
  const emailReg = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
  return emailReg.test(email)
}

/**
 * 验证密码强度
 * @param {string} password 密码
 * @returns {boolean} 验证结果
 */
export function validatePassword(password) {
  // 密码长度6-20位，包含字母和数字
  const passwordReg = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,20}$/
  return passwordReg.test(password)
}

/**
 * 验证身份证号码
 * @param {string} idCard 身份证号码
 * @returns {boolean} 验证结果
 */
export function validateIdCard(idCard) {
  const idCardReg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
  return idCardReg.test(idCard)
}

/**
 * 验证中文姓名
 * @param {string} name 姓名
 * @returns {boolean} 验证结果
 */
export function validateChineseName(name) {
  const nameReg = /^[\u4e00-\u9fa5]{2,10}$/
  return nameReg.test(name)
}

/**
 * 验证验证码
 * @param {string} code 验证码
 * @returns {boolean} 验证结果
 */
export function validateCode(code) {
  const codeReg = /^\d{4,6}$/
  return codeReg.test(code)
}

/**
 * 验证银行卡号
 * @param {string} bankCard 银行卡号
 * @returns {boolean} 验证结果
 */
export function validateBankCard(bankCard) {
  const bankCardReg = /^\d{16,19}$/
  return bankCardReg.test(bankCard)
}

/**
 * 验证URL
 * @param {string} url URL地址
 * @returns {boolean} 验证结果
 */
export function validateUrl(url) {
  const urlReg = /^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/i
  return urlReg.test(url)
}

/**
 * 验证IP地址
 * @param {string} ip IP地址
 * @returns {boolean} 验证结果
 */
export function validateIP(ip) {
  const ipReg = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
  return ipReg.test(ip)
}

/**
 * 验证是否为空
 * @param {any} value 值
 * @returns {boolean} 验证结果
 */
export function validateRequired(value) {
  if (value === null || value === undefined) {
    return false
  }
  if (typeof value === 'string') {
    return value.trim() !== ''
  }
  if (Array.isArray(value)) {
    return value.length > 0
  }
  return true
}

/**
 * 验证数字范围
 * @param {number} value 数值
 * @param {number} min 最小值
 * @param {number} max 最大值
 * @returns {boolean} 验证结果
 */
export function validateRange(value, min, max) {
  const num = Number(value)
  return !isNaN(num) && num >= min && num <= max
}

/**
 * 验证字符串长度
 * @param {string} str 字符串
 * @param {number} min 最小长度
 * @param {number} max 最大长度
 * @returns {boolean} 验证结果
 */
export function validateLength(str, min, max) {
  if (typeof str !== 'string') {
    return false
  }
  const len = str.length
  return len >= min && len <= max
}